package com.ruoyi.web.controller.system;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import io.swagger.annotations.ApiOperation;
import jodd.http.HttpRequest;
import jodd.http.HttpResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 第三方登录验证
 *
 * @author ruoyi
 */
@RestController
public class ThirdPartLoginController {
    /**
     * @Description: 平台带着token来系统里面登陆
     * 这边需要做两个步骤：
     * 1.检测数据库里面有没有这个用户名，有则不操作，无则添加
     * 2.去平台验证一下Token是否有，有的话继续操作后面的登录
     * 平台没有这个token，则直接打回去，不让上来
     * @author: 穆雄雄
     * @date: 2022/4/19 上午 11:38
     * @Return: com.ruoyi.common.core.domain.AjaxResult
     */
    @Autowired
    private ISysUserService userService;

    @Autowired
    private ISysRoleService roleService;

    @Autowired
    private ISysPostService postService;
    @Autowired
    private SysLoginService loginService;

    @PostMapping("/toThirdPartGetAuthJHaveToken")
    @ApiOperation(value = "平台带着token过来登录")
    public AjaxResult toThirdPartGetAuthJHaveToken(String token) {

        //调用验证token的方法
        JSONObject jsonObject = checkJToken(token);
//以下测试用
//        JSONObject jsonObject =new JSONObject();
//        jsonObject.put("code","0");
//        JSONObject jsonObjectData =new JSONObject();
//        jsonObjectData.put("name","zhansan");
//        jsonObject.put("data",jsonObjectData);
//        jsonObject.put("msg","验证成功");

        String code = jsonObject.getString("code");
        Integer level = 0;
        String loginName = "";
        Long organId = null;
        //返回结果
        AjaxResult ajax = null;
        if (code.equals("0")) {
            //验证成功
            JSONObject dataObject = jsonObject.getJSONObject("data");
            //拿到其他的信息
            loginName = dataObject.getString("name");
        } else {
            ajax = AjaxResult.error(jsonObject.getString("msg"));
            return ajax;
        }

        String isUserNameHas = "";
        //检测一下用户名存在不存在
        if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(loginName))) {
            isUserNameHas = "用户已存在，不需要执行添加的操作";
        } else {
//            //用户不存在时，将用户添加到数据库中
//            SysUser sysUser = new SysUser();
//            //登录名
//            sysUser.setUserName(loginName);
//            //昵称
//            sysUser.setNickName(loginName);
//            //密码统一都是123456
//            sysUser.setPassword(SecurityUtils.encryptPassword("123456"));
//            //创建者，标识J平台过来的用户
//            sysUser.setCreateBy("j_have_token");
//            //创建日期
//            sysUser.setCreateTime(new Date());
//            //所属等级
//            sysUser.setHierarchy(level);
//            //明文
//            sysUser.setMingwen("123456");
            //账户权限：为了区分是平台的用户还是本系统用户

//            //id返回来之后需要加上
//            sysUser.setDeptId(organId);
//
//            //所属等级如果没有，则角色是全国的
//            //1  省  2 市     3  区
//            if (level == null) {
//                //角色
//                Long[] roleids = {104L};
//                sysUser.setRoleIds(roleids);
//            } else {
//                Long[] roleids = {100L};
//                sysUser.setRoleIds(roleids);
//            }
//            int rows = userService.insertUser(sysUser);
//            if (rows > 0) {
//                isUserNameHas = "添加成功";
//            }
        }
        ajax = AjaxResult.success();
        // 生成令牌(不加验证码登录)
        String tokenNew = loginService.loginNoCode(loginName, "123456", null);
        ajax.put(Constants.TOKEN, tokenNew);
        ajax.put("isUserNameHas", isUserNameHas);
        ajax.put("msg", "登录成功");
        return ajax;
    }

    /**
     * 通过第三方平台接口，鉴定token合法性，并返回userName等登录信息
     * 这个方法需要根据实际需要进行修改
     * @param token
     * @return
     */
    public JSONObject checkJToken(String token) {
        JSONObject jsonObject = new JSONObject();
        //测试环境
        String baseUrl = "http://xxxxx/checkTokenRtnInfo?stk=" + token;//根据实际地址进行修改
        HttpRequest request = HttpRequest.get(baseUrl)
                .header(HttpHeaders.CONTENT_TYPE, "application/json")
                .header(HttpHeaders.ACCEPT, "application/json");

        HttpResponse response = request.send();
        return (JSONObject) JSONObject.parse(response.bodyText());
    }
}